
"""
    进程池中的进程使用消息队列进行通信
"""
import time
import multiprocessing


def write_queue(queue1):
    for i in range(10):
        if queue1.full():
            print("队列已满")
            break

        print("向队列中放入%d" % i)
        queue1.put(i)
        time.sleep(1)


def read_queue(queue1):
    for i in range(10):
        if queue1.empty():
            print("队列为空")
            break

        value = queue1.get()
        print("成功从队列中取出%d" % value)


if __name__ == '__main__':
    pool = multiprocessing.Pool(2)

    queue1 = multiprocessing.Manager().Queue(5)

    # 使用进程池执行任务
    # 同步方式
    # pool.apply(write_queue, (queue1, ))
    # pool.apply(read_queue, (queue1, ))

    # 异步方式
    # 该方法返回一个ApplyResult对象， 该对象有一个wait()方法  类似join()方法，表示让当前进程执行完毕，后续进程才能继续执行
    result = pool.apply_async(write_queue, (queue1, ))
    result.wait()

    pool.apply_async(read_queue, (queue1, ))
    pool.close()
    pool.join()

